PostgreSQL 高可用 Repmgr 源码安装与部署
1 背景知识
1.1 Repmgr 集群规划
IP 地址 | 操作系统版本 | 角色 | 主机名 |
---|---|---|---|
192.168.10.228 | VIP | VIP | |
192.168.10.229 | Alma Linux 8.8 | PostgreSQL Master | node1 |
192.168.10.230 | Alma Linux 8.8 | PostgreSQL Standby | node2 |
192.168.10.231 | Alma Linux 8.8 | PostgreSQL Standby | node3 |
192.168.10.232 | Alma Linux 8.8 | witness | node4 |
1.2 搭建步骤简介
1、安装 PostgreSQL 数据库
2、准备 Repmgr环境准备
3、安装 Repmgr 源码安装与部署
2 安装 PostgreSQL 数据库
请参考 PostgreSQL15
已完成 PostgreSQL 数据库安装,快照为 DB_INSTALL
3 PGPOOL-II操作系统环境
请参考 Repmgr环境准备
快照为 Repmgr ENV
。
4 Repmgr 安装
Warning
无特殊说明,以下操作需要在所有节点下执行。
4.1 配置 repmgr 安装目录
与 PostgreSQL 数据库安装在一起。
4.2 下载repmgr源码
su - postgres
cd /soft
wget https://www.repmgr.org/download/repmgr-5.4.1.tar.gz
tar -zxf repmgr-*.tar.gz
cd repmgr-*/
4.3 编译并执行安装
./configure && make && make install
5 Repmgr 配置
5.1 node1
5.1.1 编辑 /etc/repmgr.conf
文件
su - root
vi /etc/repmgr.conf
5.1.2 repmgr.conf
参数配置
# general
node_id=1
node_name=node1
conninfo='host=node1 user=repmgr dbname=repmgr port=5432 connect_timeout=2'
connection_check_type='ping'
data_directory='/usr/local/pgsql/data'
use_replication_slots=true
replication_user='repmgr'
replication_type='physical'
pg_bindir='/usr/local/pgsql/bin'
#auto failover
failover='automatic'
promote_command='repmgr standby promote --log-to-file'
follow_command='repmgr standby follow --log-to-file --upstream-node-id=%n'
# monitor
monitoring_history=true
monitor_interval_secs=1
reconnect_attempts=2
reconnect_interval=2
location='location1'
# pid
repmgrd_pid_file='/usr/local/pgsql/run/hamgrd.pid'
#log
log_level=INFO
log_status_interval=10
log_file='/usr/local/pgsql/log/repmgrd.log'
5.1.3 将脚本拷贝到其他节点
#root>
scp /etc/repmgr.conf node2:/etc/
scp /etc/repmgr.conf node3:/etc/
scp /etc/repmgr.conf node4:/etc/
5.1.4 5.2 加载repmgr 插件
1、更改参数并加载插件。
#postres>
psql -U postgres
ALTER SYSTEM set shared_preload_libraries='repmgr';
\c - postgres
CREATE EXTENSION repmgr;
\c repmgr
CREATE EXTENSION repmgr;
\c template1
CREATE EXTENSION repmgr;
2、重启数据库。
#postgres>
pg_ctl restart
5.2 node2
以下是需要修改的参数。
1、node_id
2、node_name
3、conninfo
#root>
vi /etc/repmgr.conf
5.3 node3
#root>
vi /etc/repmgr.conf
以下是需要修改的参数。
1、node_id
2、node_name
3、conninfo
5.4 node4
5.4.1 以下是需要修改的参数
#root>
vi /etc/repmgr.conf
1、node_id
2、node_name
3、conninfo
5.4.2 5.2 加载repmgr 插件
1、更改参数并加载插件。
#postgres>
psql -U postgres
ALTER SYSTEM set shared_preload_libraries='repmgr';
\c - postgres
CREATE EXTENSION repmgr;
\c repmgr
CREATE EXTENSION repmgr;
\c template1
CREATE EXTENSION repmgr;
2、重启数据库。
pg_ctl restart
6 节点注册
6.1 node1 注册节点
1、将本节点注册为 master .
#postgres>
repmgr primary register
2、查看集群状态。
#postgres>
repmgr cluster show
6.2 node2 流复制搭建,并加入集群。
1、搭建node2 备库。
#postgres>
repmgr -h node1 -U repmgr -d repmgr standby clone
2、启动数据库
#postgres>
pg_ctl -D $PGDATA start
3、将node2 节点注册为备节点
#postgres>
repmgr standby register
4、查看集群状态。
#postgres>
repmgr cluster show
6.3 node3流复制搭建
1、搭建node3 备库。
#postgres>
repmgr -h node1 -U repmgr -d repmgr standby clone
2、启动数据库
#postgres>
pg_ctl -D $PGDATA start
3、node3 节点注册为备节点
#postgres>
repmgr standby register
4、查看集群状态。
#postgres>
repmgr cluster show
6.4 node4 注册 witness 节点
1、注册 witness 节点。
#postgres>
repmgr witness register -hnode1 -Urepmgr -drepmgr --force
2、查看集群状态。
#postgres>
repmgr cluster show
7 配置repmgrd 守护进程
Note
repmgrd 守护进程可以自动实现故障恢复和故障转移。
7.1 配置定时任务
Warning
在所有节点上执行。这里为了防止主备切换并没有开启自动开机启动。
1、编辑 contab 文件。
#postgres>
crontab -e
2、配置定时任务计划。
#postgres>
*/1 * * * * /usr/local/pgsql/bin/repmgrd -p /usr/local/pgsql/run/hamgrd.pid
7.2 查看集群状态
#postgres>
repmgr service status ;
到此为止:打快照为 Repmgr Cluster
。
Warning
确认所有服务都已经启动之后再进行操作。
8 验证自动故障切换
8.1 关闭 node1 master 服务
#postgres>
pg_ctl stop
8.2 将故障主机加入集群
#postgres>
repmgr node rejoin -d 'host=node1 dbname=repmgr user=repmgr' --force-rewind --verbose
8.3 查看集群状态
#postgres>
repmgr service show
到此所有的 repmgr 操作都已完成;